package aerolineas;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import com.oceanic.AerolineaOceanic;
import com.oceanic.AsientoDTO;

import static org.mockito.Mockito.*;

public class MockOceanic {
	public static AerolineaOceanic mockOceanic() {
		AerolineaOceanic mOceanic = mock(AerolineaOceanic.class);
		
		List<AsientoDTO> asientos = new ArrayList<AsientoDTO>();
		asientos.add(new AsientoDTO("OC100",10,"15/08/2012","17/08/2012","10:35","05:35",new BigDecimal("3150.98"),"Ejecutiva","Pasillo",false,"_BS","SLA"));
		asientos.add(new AsientoDTO("OC100",11,"15/08/2012","17/08/2012","10:35","05:35",new BigDecimal("3150.98"),"Ejecutiva","Centro",false,"_BS","SLA"));		
		asientos.add(new AsientoDTO("OC100",12,"15/08/2012","17/08/2012","10:35","05:35",new BigDecimal("3150.98"),"Ejecutiva","Ventana",false,"_BS","SLA"));		
		asientos.add(new AsientoDTO("OC100",30,"15/08/2012","17/08/2012","10:35","05:35",new BigDecimal("6150.98"),"Primera","Pasillo",true,"_BS","SLA"));		
		asientos.add(new AsientoDTO("OC202",20,"13/09/2012","13/09/2012","06:40","16:18",new BigDecimal("6150.98"),"Primera","Centro",false,"SLA","_BS"));		
		asientos.add(new AsientoDTO("OC202",21,"13/09/2012","13/09/2012","06:40","16:18",new BigDecimal("4550.98"),"Ejecutiva","Pasillo",false,"SLA","_BS"));		
		asientos.add(new AsientoDTO("OC202",26,"13/09/2012","13/09/2012","06:40","16:18",new BigDecimal("4450.98"),"Ejecutiva","Ventana",true,"SLA","_BS"));		
		asientos.add(new AsientoDTO("OC202",27,"13/09/2012","13/09/2012","06:40","16:18",new BigDecimal("4450.98"),"Ejecutiva","Pasillo",false,"SLA","_BS"));		
		asientos.add(new AsientoDTO("OC888",1,"30/11/2012","30/11/2012","13:05","17:00",new BigDecimal("5150.98"),"Primera","Pasillo",false,"_NY","SLA"));		
		asientos.add(new AsientoDTO("OC888",2,"30/11/2012","30/11/2012","13:05","17:00",new BigDecimal("5150.98"),"Primera","Ventana",false,"_NY","SLA"));		
		asientos.add(new AsientoDTO("OC888",17,"30/11/2012","30/11/2012","13:05","17:00",new BigDecimal("3750.98"),"Ejecutiva","Pasillo",false,"_NY","SLA"));		
		asientos.add(new AsientoDTO("OC888",18,"30/11/2012","30/11/2012","13:05","17:00",new BigDecimal("3750.98"),"Ejecutiva","Centro",false,"_NY","SLA"));		
		asientos.add(new AsientoDTO("OC888",19,"30/11/2012","30/11/2012","13:05","17:00",new BigDecimal("3750.98"),"Ejecutiva","Ventana",true,"_NY","SLA"));		
		asientos.add(new AsientoDTO("OC042",19,"23/12/2012","24/12/2012","23:50","05:30",new BigDecimal("4100.98"),"Turista","Ventana",true, "SLA","_NY"));		
		asientos.add(new AsientoDTO("OC042",20,"23/12/2012","24/12/2012","23:50","05:30",new BigDecimal("4100.98"),"Turista","Pasillo",false, "SLA","_NY"));		
		asientos.add(new AsientoDTO("OC042",11,"23/12/2012","24/12/2012","23:50","05:30",new BigDecimal("4500.98"),"Ejecutiva","Ventana",false, "SLA","_NY"));		
		asientos.add(new AsientoDTO("OC042",12,"23/12/2012","24/12/2012","23:50","05:30",new BigDecimal("4500.98"),"Ejecutiva","Centro",true,"SLA","_NY"));		
		asientos.add(new AsientoDTO("OC042",13,"23/12/2012","24/12/2012","23:50","05:30",new BigDecimal("4500.98"),"Ejecutiva","Pasillo",false,"SLA","_NY"));		

		// asientosDisponiblesParaOrigen(String origen, String fechaDeSalida): List<AsientoDTO>
		when(mOceanic.asientosDisponiblesParaOrigen(anyString(), anyString())).thenReturn(asientos);
		
		// asientosDisponiblesParaOrigenYDestino(String origen, String fechaDeSalida, String destino): List<AsientoDTO>
		when(mOceanic.asientosDisponiblesParaOrigenYDestino(anyString(), anyString(), anyString())).thenReturn(asientos);
		
		// comprarSiHayDisponibilidad(String dni, String codigoDeVuelo,	Integer numeroDeAsiento): boolean
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), anyString(), anyInt())).thenReturn(false);
		
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC100"), eq(10))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC100"), eq(11))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC100"), eq(12))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC100"), eq(30))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC202"), eq(20))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC202"), eq(21))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC202"), eq(26))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC202"), eq(27))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC888"), eq(1))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC888"), eq(2))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC888"), eq(17))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC888"), eq(18))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC888"), eq(19))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC42"), eq(19))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC42"), eq(20))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC42"), eq(11))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC42"), eq(12))).thenReturn(true).thenReturn(false);
		when(mOceanic.comprarSiHayDisponibilidad(anyString(), eq("OC42"), eq(13))).thenReturn(true).thenReturn(false);
		
		// estaReservado(String codigoDeVuelo, Integer numeroDeAsiento): boolean
		when(mOceanic.estaReservado(anyString(), anyInt())).thenReturn(false);
		
		when(mOceanic.estaReservado(eq("OC100"), eq(30))).thenReturn(true);
		when(mOceanic.estaReservado(eq("OC202"), eq(26))).thenReturn(true);
		when(mOceanic.estaReservado(eq("OC888"), eq(19))).thenReturn(true);
		when(mOceanic.estaReservado(eq("OC42"), eq(19))).thenReturn(true);
		when(mOceanic.estaReservado(eq("OC42"), eq(12))).thenReturn(true);
		
		// reservar(String dni, String codigoDeVuelo, Integer numeroDeAsiento): boolean
		when(mOceanic.reservar(anyString(), anyString(), anyInt())).thenReturn(false);

		when(mOceanic.reservar(anyString(), eq("OC100"), eq(10))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC100"), eq(11))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC100"), eq(12))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC202"), eq(20))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC202"), eq(21))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC202"), eq(27))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC888"), eq(1))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC888"), eq(2))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC888"), eq(17))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC888"), eq(18))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC42"), eq(20))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC42"), eq(11))).thenReturn(true).thenReturn(false);
		when(mOceanic.reservar(anyString(), eq("OC42"), eq(13))).thenReturn(true).thenReturn(false);
		
		return mOceanic;
	}
}
